package com.sc.demo.util;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**    
 *     
 * 项目名称：51credit-member   
 * 类名称：CamelToUnderlineUtil    
 * 类描述：    驼峰=》下划线  下划线=》驼峰
 * 创建人：huan    
 * 创建时间：2016年4月8日 下午3:28:05    
 * 修改人：huan    
 * 修改时间：2016年4月8日 下午3:28:05    
 * 修改备注：    
 * @version     
 *     
 */
public class CamelToUnderlineUtil {
    
    public static final char UNDERLINE='_';  
    
    /**    
     *  驼峰=》下划线    
    */
    public static String camelToUnderline(String param){  
        if (param==null||"".equals(param.trim())){  
            return "";  
        }  
        int len=param.length();  
        StringBuilder sb=new StringBuilder(len);  
        for (int i = 0; i < len; i++) {  
            char c=param.charAt(i);  
            if (Character.isUpperCase(c)){  
                sb.append(UNDERLINE);  
                sb.append(Character.toLowerCase(c));  
            }else{  
                sb.append(c);  
            }  
        }  
        return sb.toString();  
    } 
    
    /**    
     *  下划线=》驼峰  
    */
    public static String underlineToCamel(String param){  
        if (param==null||"".equals(param.trim())){  
            return "";  
        }  
        int len=param.length();  
        StringBuilder sb=new StringBuilder(len);  
        for (int i = 0; i < len; i++) {  
            char c=param.charAt(i);  
            if (c==UNDERLINE){  
               if (++i<len){  
                   sb.append(Character.toUpperCase(param.charAt(i)));  
               }  
            }else{  
                sb.append(c);  
            }  
        }  
        return sb.toString();  
    }  
    
    /**    
     *  下划线=》驼峰   
    */
    public static String underlineToCamel2(String param){  
        if (param==null||"".equals(param.trim())){  
            return "";  
        }  
        StringBuilder sb=new StringBuilder(param);  
        Matcher mc= Pattern.compile("_").matcher(param);  
        int i=0;  
        while (mc.find()){  
            int position=mc.end()-(i++);  
            //String.valueOf(Character.toUpperCase(sb.charAt(position)));  
            sb.replace(position-1,position+1,sb.substring(position,position+1).toUpperCase());  
        }  
        return sb.toString();  
    }  
    
}
